package org.footballmanager.pandafootball.system.controller;

import org.footballmanager.pandafootball.common.constants.Constants;
import org.footballmanager.pandafootball.system.domain.FootBfinfo;
import org.footballmanager.pandafootball.system.domain.enums.BFLX;
import org.footballmanager.pandafootball.system.form.impl.FootBfinfoSearchForm;
import org.footballmanager.pandafootball.system.service.FootBfinfoService;
import org.footballmanager.pandafootball.system.service.FootSjService;
import org.footballmanager.pandafootball.system.service.FootUserPersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;

/**
 * 报分控制类
 * 提供了一些基本的服务，如初始化、报分列表等方法。
 * spring mvc思想 通过controller来调用service里的方法，
 * service里的方法再通过调用Dao来实现对数据的操作
 * 返回值统统是String类型的返回页面有统一的安排方便代码提取
 *
 * @author chenjian
 * @since 2017年9月27日上午10:57:28
 */
@Controller
//@SessionAttributes("footBfinfoSearchForm")
@RequestMapping("/foot/footBfinfo")
public class FootBfinfoController extends BaseController {
    /* 实体名称 */
    private static final String ENTITYNAME = "footBfinfo";

    @Autowired
    private FootBfinfoService footBfinfoService;
    @Autowired
    private FootUserPersonService footUserPersonService;
    @Autowired
    private FootSjService footSjService;

    /**
     * 初始化
     *
     * @param map                  参数
     * @param footBfinfoSearchForm 条件参数
     */
    @ModelAttribute
    public void init(Model map, @ModelAttribute FootBfinfoSearchForm footBfinfoSearchForm) {
        map.addAttribute("sjList", footSjService.getall());
        FootBfinfoSearchForm newFootBfinfoSearchForm = new FootBfinfoSearchForm();
        if (footBfinfoSearchForm != null) {
            newFootBfinfoSearchForm = footBfinfoSearchForm;
        }
        map.addAttribute(String.format(Constants.FORMNAME, ENTITYNAME), newFootBfinfoSearchForm);
    }

    /**
     * 报分列表
     *
     * @param type                 类型
     * @param map                  参数
     * @param footBfinfoSearchForm 条件参数
     * @return 页面
     */
    @RequestMapping(value = "/search")
    public String search(@RequestParam Integer type, Model map, @ModelAttribute FootBfinfoSearchForm footBfinfoSearchForm) {
        footBfinfoSearchForm.setBflx(BFLX.values()[type]);
        footBfinfoService.search(ENTITYNAME, map, footBfinfoSearchForm);
        if (footBfinfoSearchForm.getBflx().equals(BFLX.NORMAL)) {
            return "foot/bf/footBfinfo/List";
        } else if (footBfinfoSearchForm.getBflx().equals(BFLX.GRID)) {
            return "foot/bf/footRankbfinfo/List";
        } else if (footBfinfoSearchForm.getBflx().equals(BFLX.HOTBODY)) {
            return "foot/bf/footYysbfinfo/List";
        } else if (footBfinfoSearchForm.getBflx().equals(BFLX.TOP)) {
            return "foot/bf/footTtbfinfo/List";
        }
        return null;
    }

    /**
     * 删除报分记录
     *
     * @param id      主键
     * @param request 请求
     * @return 页面
     */
    @RequestMapping(value = "/delete")
    public String delete(@RequestParam Long id, HttpServletRequest request) {
        FootBfinfo bf = footBfinfoService.get(id);
        footBfinfoService.delete(id, request);
        return "redirect:/foot/footBfinfo/search?type=" + bf.getBflx().ordinal();
    }

    /**
     * 删除报分列表
     *
     * @param footBfinfoSearchForm 条件参数
     * @param request              请求
     * @return 页面
     */
    @RequestMapping("/deleteall")
    public String deleteall(@ModelAttribute FootBfinfoSearchForm footBfinfoSearchForm,
                            HttpServletRequest request) {
        int type = footBfinfoService.deleteAll(footBfinfoSearchForm, request);
        return "redirect:/foot/footBfinfo/search?type=" + type;
    }

    /**
     * 浏览报分记录
     *
     * @param map                  参数
     * @param id                   主键
     * @param request              请求
     * @param footBfinfoSearchForm 条件参数
     * @return 页面
     */
    @RequestMapping(value = "/view", method = RequestMethod.GET)
    public String openViewPage(Model map, @RequestParam Long id, HttpServletRequest request,
                               @ModelAttribute FootBfinfoSearchForm footBfinfoSearchForm) {
        FootBfinfo bf = footBfinfoService.get(id);
        map.addAttribute("zhuqd", footUserPersonService.findQd(bf, true, request));
        map.addAttribute("keqd", footUserPersonService.findQd(bf, false, request));
        map.addAttribute(ENTITYNAME, bf);
        if (bf.getBflx().equals(BFLX.NORMAL)) {
            return "foot/bf/footBfinfo/View";
        } else if (bf.getBflx().equals(BFLX.GRID)) {
            return "foot/bf/footRankbfinfo/View";
        } else if (bf.getBflx().equals(BFLX.TOP)) {
            return "foot/bf/footTtbfinfo/View";
        }
        return null;
    }

}
